package leetcode.leetbook.数组;

/**
 * @author https://gitee.com/W_Jun
 * @date 2022-03-29 22:11
 * @Description
 * 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 * 请注意 ，必须在不复制数组的情况下原地对数组进行操作。
 *
 * 示例 1:
 *      输入: nums = [0,1,0,3,12]
 *      输出: [1,3,12,0,0]
 * 示例 2:
 *      输入: nums = [0]
 *      输出: [0]
 *
 * 提示:
 *
 * 1 <= nums.length <= 10^4
 * -2^31<= nums[i] <= 2^31- 1
 *
 * 进阶：你能尽量减少完成的操作次数吗？
 *
 * 相关标签
 *  数组
 *  双指针

 */
//参考题解：
//https://leetcode-cn.com/problems/move-zeroes/solution/dong-hua-yan-shi-283yi-dong-ling-by-wang_ni_ma/
public class Q1_移动零 {
    public static void main(String[] args) {

    }


    public static void moveZeroes(int[] nums) {
        //两次遍历的方法
        /*
        if (nums == null) return ;
        int j = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0) {
                nums[j++] = nums[i];
            }
        }
        for (int i = j; j < nums.length; j++) {
            nums[j] = 0;
        }
        */

        //一次遍历的方法
        if (nums == null) return;
        int j = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != 0) {
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j++] = temp;
            }
        }
    }
}
